首页 > 试题广场 >

扑克牌顺子

[编程题]扑克牌顺子
  • 热度指数:479835 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。
有如下规则:
1. A为1,J为11,Q为12,K为13,A不能视为14
2. 大、小王为 0,0可以看作任意牌
3. 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。
4.数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0, 13]

要求:空间复杂度 ,时间复杂度 ,本题也有时间复杂度 的解法

输入描述:
输入五张扑克牌的值


输出描述:
五张扑克牌能否组成顺子。
示例1

输入

[6,0,2,0,4]

输出

true

说明

中间的两个0一个看作3,一个看作5 。即:[6,3,2,5,4]
这样这五张牌在[2,6]区间连续,输出true 
示例2

输入

[0,3,2,6,4]

输出

true
示例3

输入

[1,0,0,1,0]

输出

false
示例4

输入

[13,12,11,0,1]

输出

false
function IsContinuous(numbers) {
    let temp = numbers.sort((a, b) => a - b).filter((a) => a > 0);
    let set = Array.from(new Set(temp));
    return set.length !== temp.length
        ? false
        : temp[temp.length - 1] - temp[0] < 5;
}

发表于 2023-12-06 21:56:41 回复(0)
简洁的JavaScript:
function IsContinuous(numbers)
{
    // write code here
    let zeroes = 0;
    let min = 13;
    let max = 1;
    const set = new Set();
    for (let num of numbers){
        if (num === 0){ 
            zeroes++;
            continue;
        }
        if (num > max) max = num;
        if (num < min) min = num;
        set.add(num);
    }
    
    if (max - min > 4) return false;

    return set.size + zeroes === 5;
}


发表于 2021-10-09 08:15:07 回复(0)
function IsContinuous(numbers)
{
    numbers.sort((a,b) => a-b);
    let numsZero = 0;
    let numsGap = 0;
    numbers.forEach(value => {
        if(value === 0) numsZero++;
    })
//     第一个不为0的数
    let small = numsZero;
//     第一个不为0的数的下一个数
    let big = small +1;
    while(big < numbers.length){
//         有对子的话就不会是顺子
        if(numbers[small] === numbers[big] ){
            return false;
        }
//         计算空隔数
        numsGap += numbers[big] - numbers[small] - 1;
        small = big;
        big++;
    }
    return numsZero >= numsGap ? true : false;
}

发表于 2021-10-02 14:37:00 回复(0)
function IsContinuous(numbers)
{
    // write code here
    var joker = 0;
    var n = numbers.sort();
    for(let i=0;i<4;i++){
        if(n[i]==0) joker++;
        else if(n[i]==n[i+1]) return false;
    }
    return n[4]-n[joker]<5;
}

发表于 2021-08-30 21:23:41 回复(0)

问题信息

难度:
4条回答 119868浏览

热门推荐

通过挑战的用户

查看代码